// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   DLP API Version v2beta1
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://cloud.google.com/dlp/docs/'>DLP API</a>
 *      <tr><th>API Version<td>v2beta1
 *      <tr><th>API Rev<td>20170314 (803)
 *      <tr><th>API Docs
 *          <td><a href='https://cloud.google.com/dlp/docs/'>
 *              https://cloud.google.com/dlp/docs/</a>
 *      <tr><th>Discovery Name<td>dlp
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using DLP API can be found at
 * <a href='https://cloud.google.com/dlp/docs/'>https://cloud.google.com/dlp/docs/</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.DLP.v2beta1
{
    /// <summary>The DLP Service.</summary>
    public class DLPService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v2beta1";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public DLPService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public DLPService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            content = new ContentResource(this);
            inspect = new InspectResource(this);
            rootCategories = new RootCategoriesResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "dlp"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://dlp.googleapis.com/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return ""; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the DLP API.</summary>
        public class Scope
        {
            /// <summary>View and manage your data across Google Cloud Platform services</summary>
            public static string CloudPlatform = "https://www.googleapis.com/auth/cloud-platform";

        }



        private readonly ContentResource content;

        /// <summary>Gets the Content resource.</summary>
        public virtual ContentResource Content
        {
            get { return content; }
        }

        private readonly InspectResource inspect;

        /// <summary>Gets the Inspect resource.</summary>
        public virtual InspectResource Inspect
        {
            get { return inspect; }
        }

        private readonly RootCategoriesResource rootCategories;

        /// <summary>Gets the RootCategories resource.</summary>
        public virtual RootCategoriesResource RootCategories
        {
            get { return rootCategories; }
        }
    }

    ///<summary>A base abstract class for DLP requests.</summary>
    public abstract class DLPBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new DLPBaseServiceRequest instance.</summary>
        protected DLPBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>V1 error format.</summary>
        [Google.Apis.Util.RequestParameterAttribute("$.xgafv", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<XgafvEnum> Xgafv { get; set; }

        /// <summary>V1 error format.</summary>
        public enum XgafvEnum
        {
            /// <summary>v1 error format</summary>
            [Google.Apis.Util.StringValueAttribute("1")]
            Value1,
            /// <summary>v2 error format</summary>
            [Google.Apis.Util.StringValueAttribute("2")]
            Value2,
        }

        /// <summary>OAuth access token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("access_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string AccessToken { get; set; }

        /// <summary>Data format for response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
            /// <summary>Media download with context-dependent Content-Type</summary>
            [Google.Apis.Util.StringValueAttribute("media")]
            Media,
            /// <summary>Responses with Content-Type of application/x-protobuf</summary>
            [Google.Apis.Util.StringValueAttribute("proto")]
            Proto,
        }

        /// <summary>OAuth bearer token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("bearer_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string BearerToken { get; set; }

        /// <summary>JSONP</summary>
        [Google.Apis.Util.RequestParameterAttribute("callback", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Callback { get; set; }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Pretty-print response.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("pp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> Pp { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>Legacy upload protocol for media (e.g. "media", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("uploadType", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadType { get; set; }

        /// <summary>Upload protocol for media (e.g. "raw", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("upload_protocol", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadProtocol { get; set; }

        /// <summary>Initializes DLP parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "$.xgafv", new Google.Apis.Discovery.Parameter
                {
                    Name = "$.xgafv",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "access_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "access_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "bearer_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "bearer_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "callback", new Google.Apis.Discovery.Parameter
                {
                    Name = "callback",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "pp", new Google.Apis.Discovery.Parameter
                {
                    Name = "pp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "uploadType", new Google.Apis.Discovery.Parameter
                {
                    Name = "uploadType",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "upload_protocol", new Google.Apis.Discovery.Parameter
                {
                    Name = "upload_protocol",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "content" collection of methods.</summary>
    public class ContentResource
    {
        private const string Resource = "content";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ContentResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Find potentially sensitive info in a list of strings. This method has limits on input size,
        /// processing time, and output size.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual InspectRequest Inspect(Google.Apis.DLP.v2beta1.Data.InspectContentRequest body)
        {
            return new InspectRequest(service, body);
        }

        /// <summary>Find potentially sensitive info in a list of strings. This method has limits on input size,
        /// processing time, and output size.</summary>
        public class InspectRequest : DLPBaseServiceRequest<Google.Apis.DLP.v2beta1.Data.InspectContentResponse>
        {
            /// <summary>Constructs a new Inspect request.</summary>
            public InspectRequest(Google.Apis.Services.IClientService service, Google.Apis.DLP.v2beta1.Data.InspectContentRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.DLP.v2beta1.Data.InspectContentRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "inspect"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v2beta1/content:inspect"; }
            }

            /// <summary>Initializes Inspect parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Redact potentially sensitive info from a list of strings. This method has limits on input size,
        /// processing time, and output size.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual RedactRequest Redact(Google.Apis.DLP.v2beta1.Data.RedactContentRequest body)
        {
            return new RedactRequest(service, body);
        }

        /// <summary>Redact potentially sensitive info from a list of strings. This method has limits on input size,
        /// processing time, and output size.</summary>
        public class RedactRequest : DLPBaseServiceRequest<Google.Apis.DLP.v2beta1.Data.RedactContentResponse>
        {
            /// <summary>Constructs a new Redact request.</summary>
            public RedactRequest(Google.Apis.Services.IClientService service, Google.Apis.DLP.v2beta1.Data.RedactContentRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.DLP.v2beta1.Data.RedactContentRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "redact"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v2beta1/content:redact"; }
            }

            /// <summary>Initializes Redact parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "inspect" collection of methods.</summary>
    public class InspectResource
    {
        private const string Resource = "inspect";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public InspectResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            operations = new OperationsResource(service);
            results = new ResultsResource(service);

        }

        private readonly OperationsResource operations;

        /// <summary>Gets the Operations resource.</summary>
        public virtual OperationsResource Operations
        {
            get { return operations; }
        }

        /// <summary>The "operations" collection of methods.</summary>
        public class OperationsResource
        {
            private const string Resource = "operations";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public OperationsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Cancels an operation. Use the get method to check whether the cancellation succeeded or whether
            /// the operation completed despite cancellation.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="name">The name of the operation resource to be cancelled.</param>
            public virtual CancelRequest Cancel(Google.Apis.DLP.v2beta1.Data.CancelOperationRequest body, string name)
            {
                return new CancelRequest(service, body, name);
            }

            /// <summary>Cancels an operation. Use the get method to check whether the cancellation succeeded or whether
            /// the operation completed despite cancellation.</summary>
            public class CancelRequest : DLPBaseServiceRequest<Google.Apis.DLP.v2beta1.Data.Empty>
            {
                /// <summary>Constructs a new Cancel request.</summary>
                public CancelRequest(Google.Apis.Services.IClientService service, Google.Apis.DLP.v2beta1.Data.CancelOperationRequest body, string name)
                    : base(service)
                {
                    Name = name;
                    Body = body;
                    InitParameters();
                }


                /// <summary>The name of the operation resource to be cancelled.</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.DLP.v2beta1.Data.CancelOperationRequest Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "cancel"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v2beta1/{+name}:cancel"; }
                }

                /// <summary>Initializes Cancel parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^inspect/operations/[^/]+$",
                        });
                }

            }

            /// <summary>Schedule a job scanning content in a Google Cloud Platform data repository.</summary>
            /// <param name="body">The body of the request.</param>
            public virtual CreateRequest Create(Google.Apis.DLP.v2beta1.Data.CreateInspectOperationRequest body)
            {
                return new CreateRequest(service, body);
            }

            /// <summary>Schedule a job scanning content in a Google Cloud Platform data repository.</summary>
            public class CreateRequest : DLPBaseServiceRequest<Google.Apis.DLP.v2beta1.Data.Operation>
            {
                /// <summary>Constructs a new Create request.</summary>
                public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.DLP.v2beta1.Data.CreateInspectOperationRequest body)
                    : base(service)
                {
                    Body = body;
                    InitParameters();
                }



                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.DLP.v2beta1.Data.CreateInspectOperationRequest Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "create"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v2beta1/inspect/operations"; }
                }

                /// <summary>Initializes Create parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                }

            }

            /// <summary>This method is not supported and the server returns `UNIMPLEMENTED`.</summary>
            /// <param name="name">The name of the operation resource to be deleted.</param>
            public virtual DeleteRequest Delete(string name)
            {
                return new DeleteRequest(service, name);
            }

            /// <summary>This method is not supported and the server returns `UNIMPLEMENTED`.</summary>
            public class DeleteRequest : DLPBaseServiceRequest<Google.Apis.DLP.v2beta1.Data.Empty>
            {
                /// <summary>Constructs a new Delete request.</summary>
                public DeleteRequest(Google.Apis.Services.IClientService service, string name)
                    : base(service)
                {
                    Name = name;
                    InitParameters();
                }


                /// <summary>The name of the operation resource to be deleted.</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "delete"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "DELETE"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v2beta1/{+name}"; }
                }

                /// <summary>Initializes Delete parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^inspect/operations/[^/]+$",
                        });
                }

            }

            /// <summary>Gets the latest state of a long-running operation.  Clients can use this method to poll the
            /// operation result at intervals as recommended by the API service.</summary>
            /// <param name="name">The name of the operation resource.</param>
            public virtual GetRequest Get(string name)
            {
                return new GetRequest(service, name);
            }

            /// <summary>Gets the latest state of a long-running operation.  Clients can use this method to poll the
            /// operation result at intervals as recommended by the API service.</summary>
            public class GetRequest : DLPBaseServiceRequest<Google.Apis.DLP.v2beta1.Data.Operation>
            {
                /// <summary>Constructs a new Get request.</summary>
                public GetRequest(Google.Apis.Services.IClientService service, string name)
                    : base(service)
                {
                    Name = name;
                    InitParameters();
                }


                /// <summary>The name of the operation resource.</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "get"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v2beta1/{+name}"; }
                }

                /// <summary>Initializes Get parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^inspect/operations/[^/]+$",
                        });
                }

            }

            /// <summary>Lists operations that match the specified filter in the request. If the server doesn't support
            /// this method, it returns `UNIMPLEMENTED`.
            ///
            /// NOTE: the `name` binding below allows API services to override the binding to use different resource
            /// name schemes, such as `users/operations`.</summary>
            /// <param name="name">The name of the operation collection.</param>
            public virtual ListRequest List(string name)
            {
                return new ListRequest(service, name);
            }

            /// <summary>Lists operations that match the specified filter in the request. If the server doesn't support
            /// this method, it returns `UNIMPLEMENTED`.
            ///
            /// NOTE: the `name` binding below allows API services to override the binding to use different resource
            /// name schemes, such as `users/operations`.</summary>
            public class ListRequest : DLPBaseServiceRequest<Google.Apis.DLP.v2beta1.Data.ListOperationsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string name)
                    : base(service)
                {
                    Name = name;
                    InitParameters();
                }


                /// <summary>The name of the operation collection.</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }

                /// <summary>This parameter supports filtering by done, ie done=true or done=false.</summary>
                [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string Filter { get; set; }

                /// <summary>The list page token.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>The list page size. The max allowed value is 256 and default is 100.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v2beta1/{+name}"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^inspect/operations$",
                        });
                    RequestParameters.Add(
                        "filter", new Google.Apis.Discovery.Parameter
                        {
                            Name = "filter",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }
        private readonly ResultsResource results;

        /// <summary>Gets the Results resource.</summary>
        public virtual ResultsResource Results
        {
            get { return results; }
        }

        /// <summary>The "results" collection of methods.</summary>
        public class ResultsResource
        {
            private const string Resource = "results";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public ResultsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;
                findings = new FindingsResource(service);

            }

            private readonly FindingsResource findings;

            /// <summary>Gets the Findings resource.</summary>
            public virtual FindingsResource Findings
            {
                get { return findings; }
            }

            /// <summary>The "findings" collection of methods.</summary>
            public class FindingsResource
            {
                private const string Resource = "findings";

                /// <summary>The service which this resource belongs to.</summary>
                private readonly Google.Apis.Services.IClientService service;

                /// <summary>Constructs a new resource.</summary>
                public FindingsResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;

                }


                /// <summary>Returns list of results for given inspect operation result set id.</summary>
                /// <param name="name">Identifier of the results set returned as metadata of the longrunning operation created by a call
                /// to CreateInspectOperation. Should be in the format of `inspect/results/{id}.</param>
                public virtual ListRequest List(string name)
                {
                    return new ListRequest(service, name);
                }

                /// <summary>Returns list of results for given inspect operation result set id.</summary>
                public class ListRequest : DLPBaseServiceRequest<Google.Apis.DLP.v2beta1.Data.ListInspectFindingsResponse>
                {
                    /// <summary>Constructs a new List request.</summary>
                    public ListRequest(Google.Apis.Services.IClientService service, string name)
                        : base(service)
                    {
                        Name = name;
                        InitParameters();
                    }


                    /// <summary>Identifier of the results set returned as metadata of the longrunning operation created
                    /// by a call to CreateInspectOperation. Should be in the format of `inspect/results/{id}.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }

                    /// <summary>The value returned by the last `ListInspectFindingsResponse`; indicates that this is a
                    /// continuation of a prior `ListInspectFindings` call, and that the system should return the next
                    /// page of data.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string PageToken { get; set; }

                    /// <summary>Maximum number of results to return. If 0, the implementation will select a reasonable
                    /// value.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<int> PageSize { get; set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "list"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v2beta1/{+name}/findings"; }
                    }

                    /// <summary>Initializes List parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "name", new Google.Apis.Discovery.Parameter
                            {
                                Name = "name",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^inspect/results/[^/]+$",
                            });
                        RequestParameters.Add(
                            "pageToken", new Google.Apis.Discovery.Parameter
                            {
                                Name = "pageToken",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "pageSize", new Google.Apis.Discovery.Parameter
                            {
                                Name = "pageSize",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }
            }
        }
    }

    /// <summary>The "rootCategories" collection of methods.</summary>
    public class RootCategoriesResource
    {
        private const string Resource = "rootCategories";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public RootCategoriesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            infoTypes = new InfoTypesResource(service);

        }

        private readonly InfoTypesResource infoTypes;

        /// <summary>Gets the InfoTypes resource.</summary>
        public virtual InfoTypesResource InfoTypes
        {
            get { return infoTypes; }
        }

        /// <summary>The "infoTypes" collection of methods.</summary>
        public class InfoTypesResource
        {
            private const string Resource = "infoTypes";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public InfoTypesResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Returns sensitive information types for given category.</summary>
            /// <param name="category">Category name as returned by ListRootCategories.</param>
            public virtual ListRequest List(string category)
            {
                return new ListRequest(service, category);
            }

            /// <summary>Returns sensitive information types for given category.</summary>
            public class ListRequest : DLPBaseServiceRequest<Google.Apis.DLP.v2beta1.Data.ListInfoTypesResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string category)
                    : base(service)
                {
                    Category = category;
                    InitParameters();
                }


                /// <summary>Category name as returned by ListRootCategories.</summary>
                [Google.Apis.Util.RequestParameterAttribute("category", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Category { get; private set; }

                /// <summary>Optional BCP-47 language code for localized info type friendly names. If omitted, or if
                /// localized strings are not available, en-US strings will be returned.</summary>
                [Google.Apis.Util.RequestParameterAttribute("languageCode", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string LanguageCode { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v2beta1/rootCategories/{+category}/infoTypes"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "category", new Google.Apis.Discovery.Parameter
                        {
                            Name = "category",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^[^/]+$",
                        });
                    RequestParameters.Add(
                        "languageCode", new Google.Apis.Discovery.Parameter
                        {
                            Name = "languageCode",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }

        /// <summary>Returns the list of root categories of sensitive information.</summary>
        public virtual ListRequest List()
        {
            return new ListRequest(service);
        }

        /// <summary>Returns the list of root categories of sensitive information.</summary>
        public class ListRequest : DLPBaseServiceRequest<Google.Apis.DLP.v2beta1.Data.ListRootCategoriesResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service)
                : base(service)
            {
                InitParameters();
            }


            /// <summary>Optional language code for localized friendly category names. If omitted or if localized
            /// strings are not available, en-US strings will be returned.</summary>
            [Google.Apis.Util.RequestParameterAttribute("languageCode", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string LanguageCode { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v2beta1/rootCategories"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "languageCode", new Google.Apis.Discovery.Parameter
                    {
                        Name = "languageCode",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }
}

namespace Google.Apis.DLP.v2beta1.Data
{    

    /// <summary>The request message for Operations.CancelOperation.</summary>
    public class CancelOperationRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Info Type Category description.</summary>
    public class CategoryDescription : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Human readable form of the category name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>Internal name of the category.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Record key for a finding in a Cloud Storage file.</summary>
    public class CloudStorageKey : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Path to the file.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filePath")]
        public virtual string FilePath { get; set; } 

        /// <summary>Byte offset of the referenced data in the file.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startOffset")]
        public virtual System.Nullable<long> StartOffset { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Options defining a file or a set of files (path ending with *) within a Google Cloud Storage
    /// bucket.</summary>
    public class CloudStorageOptions : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("fileSet")]
        public virtual FileSet FileSet { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Container structure for the content to inspect.</summary>
    public class ContentItem : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Content data to inspect or redact.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("data")]
        public virtual string Data { get; set; } 

        /// <summary>Type of the content, as defined in Content-Type HTTP header. Supported types are: all "text" types,
        /// octet streams, PNG images, JPEG images.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>String data to inspect or redact.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request for scheduling a scan of a data subset from a Google Platform data repository.</summary>
    public class CreateInspectOperationRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Configuration for the inspector.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inspectConfig")]
        public virtual InspectConfig InspectConfig { get; set; } 

        /// <summary>Specification of the data set to process.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storageConfig")]
        public virtual StorageConfig StorageConfig { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Record key for a finding in Cloud Datastore.</summary>
    public class DatastoreKey : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Datastore entity key.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entityKey")]
        public virtual Key EntityKey { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Options defining a data set within Google Cloud Datastore.</summary>
    public class DatastoreOptions : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The kind to process.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual KindExpression Kind { get; set; } 

        /// <summary>A partition ID identifies a grouping of entities. The grouping is always by project and namespace,
        /// however the namespace ID may be empty.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("partitionId")]
        public virtual PartitionId PartitionId { get; set; } 

        /// <summary>Properties to scan. If none are specified, all properties will be scanned by default.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("projection")]
        public virtual System.Collections.Generic.IList<Projection> Projection { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A
    /// typical example is to use it as the request or the response type of an API method. For instance:
    ///
    /// service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
    ///
    /// The JSON representation for `Empty` is empty JSON object `{}`.</summary>
    public class Empty : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>General identifier of a data field in a storage service.</summary>
    public class FieldId : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Column name describing the field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("columnName")]
        public virtual string ColumnName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Set of files to scan.</summary>
    public class FileSet : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The url, in the format gs:. Trailing wildcard in the path is allowed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Container structure describing a single finding within a string or image.</summary>
    public class Finding : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Timestamp when finding was detected.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual object CreateTime { get; set; } 

        /// <summary>The specific type of info the string might be.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("infoType")]
        public virtual InfoType InfoType { get; set; } 

        /// <summary>Estimate of how likely it is that the info_type is correct.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("likelihood")]
        public virtual string Likelihood { get; set; } 

        /// <summary>Location of the info found.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual Location Location { get; set; } 

        /// <summary>The specific string that may be potentially sensitive info.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quote")]
        public virtual string Quote { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Bounding box encompassing detected text within an image.</summary>
    public class ImageLocation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Height of the bounding box in pixels.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("height")]
        public virtual System.Nullable<int> Height { get; set; } 

        /// <summary>Left coordinate of the bounding box. (0,0) is upper left.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("left")]
        public virtual System.Nullable<int> Left { get; set; } 

        /// <summary>Top coordinate of the bounding box. (0,0) is upper left.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("top")]
        public virtual System.Nullable<int> Top { get; set; } 

        /// <summary>Width of the bounding box in pixels.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("width")]
        public virtual System.Nullable<int> Width { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Type of information detected by the API.</summary>
    public class InfoType : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Name of the information type, provided by the API call ListInfoTypes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Info type description.</summary>
    public class InfoTypeDescription : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>List of categories this info type belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categories")]
        public virtual System.Collections.Generic.IList<CategoryDescription> Categories { get; set; } 

        /// <summary>Human readable form of the info type name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>Internal name of the info type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Configuration description of the scanning process. When used with redactContent only info_types and
    /// min_likelihood are currently used.</summary>
    public class InspectConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>When true, exclude type information of the findings.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("excludeTypes")]
        public virtual System.Nullable<bool> ExcludeTypes { get; set; } 

        /// <summary>When true, a contextual quote from the data that triggered a finding will be included in the
        /// response; see Finding.quote.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("includeQuote")]
        public virtual System.Nullable<bool> IncludeQuote { get; set; } 

        /// <summary>Restrict what info_types to look for. The values must correspond to InfoType values returned by
        /// ListInfoTypes or found in documentation. Empty info_types runs all enabled detectors.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("infoTypes")]
        public virtual System.Collections.Generic.IList<InfoType> InfoTypes { get; set; } 

        /// <summary>Limit the number of findings per content item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxFindings")]
        public virtual System.Nullable<int> MaxFindings { get; set; } 

        /// <summary>Only return findings equal or above this threshold.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minLikelihood")]
        public virtual string MinLikelihood { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request to search for potentially sensitive info in a list of items.</summary>
    public class InspectContentRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Configuration for the inspector.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inspectConfig")]
        public virtual InspectConfig InspectConfig { get; set; } 

        /// <summary>The list of items to inspect. Items in a single request are considered "related" unless
        /// inspect_config.independent_inputs is true. Up to 100 are allowed per request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<ContentItem> Items { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Results of inspecting a list of items.</summary>
    public class InspectContentResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Each content_item from the request will have a result in this list, in the same order as the
        /// request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("results")]
        public virtual System.Collections.Generic.IList<InspectResult> Results { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>All the findings for a single scanned item.</summary>
    public class InspectResult : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>List of findings for an item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("findings")]
        public virtual System.Collections.Generic.IList<Finding> Findings { get; set; } 

        /// <summary>If true, then this item might have more findings than were returned, and the findings returned are
        /// an arbitrary subset of all findings. The findings list might be truncated because the input items were too
        /// large, or because the server reached the maximum amount of resources allowed for a single API call. For best
        /// results, divide the input into smaller batches.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("findingsTruncated")]
        public virtual System.Nullable<bool> FindingsTruncated { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A unique identifier for a Datastore entity. If a key's partition ID or any of its path kinds or names
    /// are reserved/read-only, the key is reserved/read-only. A reserved/read-only key is forbidden in certain
    /// documented contexts.</summary>
    public class Key : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Entities are partitioned into subsets, currently identified by a project ID and namespace ID.
        /// Queries are scoped to a single partition.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("partitionId")]
        public virtual PartitionId PartitionId { get; set; } 

        /// <summary>The entity path. An entity path consists of one or more elements composed of a kind and a string or
        /// numerical identifier, which identify entities. The first element identifies a _root entity_, the second
        /// element identifies a _child_ of the root entity, the third element identifies a child of the second entity,
        /// and so forth. The entities identified by all prefixes of the path are called the element's _ancestors_.
        ///
        /// A path can never be empty, and a path can have at most 100 elements.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("path")]
        public virtual System.Collections.Generic.IList<PathElement> Path { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A representation of a Datastore kind.</summary>
    public class KindExpression : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the kind.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response to the ListInfoTypes request.</summary>
    public class ListInfoTypesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Set of sensitive info types belonging to a category.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("infoTypes")]
        public virtual System.Collections.Generic.IList<InfoTypeDescription> InfoTypes { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response to the ListInspectFindings request.</summary>
    public class ListInspectFindingsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If not empty, indicates that there may be more results that match the request; this value should be
        /// passed in a new `ListInspectFindingsRequest`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("result")]
        public virtual InspectResult Result { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response message for Operations.ListOperations.</summary>
    public class ListOperationsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The standard List next-page token.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>A list of operations that matches the specified filter in the request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operations")]
        public virtual System.Collections.Generic.IList<Operation> Operations { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response for ListRootCategories request.</summary>
    public class ListRootCategoriesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>List of all into type categories supported by the API.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categories")]
        public virtual System.Collections.Generic.IList<CategoryDescription> Categories { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Specifies the location of a finding within its source item.</summary>
    public class Location : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Zero-based byte offsets within a content item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("byteRange")]
        public virtual Range ByteRange { get; set; } 

        /// <summary>Character offsets within a content item, included when content type is a text. Default charset
        /// assumed to be UTF-8.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("codepointRange")]
        public virtual Range CodepointRange { get; set; } 

        /// <summary>Field id of the field containing the finding.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fieldId")]
        public virtual FieldId FieldId { get; set; } 

        /// <summary>Location within an image's pixels.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("imageBoxes")]
        public virtual System.Collections.Generic.IList<ImageLocation> ImageBoxes { get; set; } 

        /// <summary>Key of the finding.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("recordKey")]
        public virtual RecordKey RecordKey { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>This resource represents a long-running operation that is the result of a network API call.</summary>
    public class Operation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If the value is `false`, it means the operation is still in progress. If true, the operation is
        /// completed, and either `error` or `response` is available.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("done")]
        public virtual System.Nullable<bool> Done { get; set; } 

        /// <summary>The error result of the operation in case of failure or cancellation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("error")]
        public virtual Status Error { get; set; } 

        /// <summary>This field will contain an `InspectOperationMetdata` object.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual System.Collections.Generic.IDictionary<string,object> Metadata { get; set; } 

        /// <summary>The server-assigned name, The `name` should have the format of `inspect/operations/`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>This field will contain an `InspectOperationResult` object.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("response")]
        public virtual System.Collections.Generic.IDictionary<string,object> Response { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Datastore partition ID. A partition ID identifies a grouping of entities. The grouping is always by
    /// project and namespace, however the namespace ID may be empty.
    ///
    /// A partition ID contains several dimensions: project ID and namespace ID.</summary>
    public class PartitionId : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If not empty, the ID of the database to which the entities belong.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("databaseId")]
        public virtual string DatabaseId { get; set; } 

        /// <summary>If not empty, the ID of the namespace to which the entities belong.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namespaceId")]
        public virtual string NamespaceId { get; set; } 

        /// <summary>The ID of the project to which the entities belong.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("projectId")]
        public virtual string ProjectId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A (kind, ID/name) pair used to construct a key path.
    ///
    /// If either name or ID is set, the element is complete. If neither is set, the element is incomplete.</summary>
    public class PathElement : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The auto-allocated ID of the entity. Never equal to zero. Values less than zero are discouraged and
        /// may not be supported in the future.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<long> Id { get; set; } 

        /// <summary>The kind of the entity. A kind matching regex `__.*__` is reserved/read-only. A kind must not
        /// contain more than 1500 bytes when UTF-8 encoded. Cannot be `""`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The name of the entity. A name matching regex `__.*__` is reserved/read-only. A name must not be
        /// more than 1500 bytes when UTF-8 encoded. Cannot be `""`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A representation of a Datastore property in a projection.</summary>
    public class Projection : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The property to project.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("property")]
        public virtual PropertyReference Property { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A reference to a property relative to the Datastore kind expressions.</summary>
    public class PropertyReference : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the property. If name includes "."s, it may be interpreted as a property name
        /// path.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Generic half-open interval [start, end)</summary>
    public class Range : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Index of the last character of the range (exclusive).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>Index of the first character of the range (inclusive).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Message for a unique key indicating a record that contains a finding.</summary>
    public class RecordKey : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("cloudStorageKey")]
        public virtual CloudStorageKey CloudStorageKey { get; set; } 

        [Newtonsoft.Json.JsonPropertyAttribute("datastoreKey")]
        public virtual DatastoreKey DatastoreKey { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request to search for potentially sensitive info in a list of items and replace it with a default or
    /// provided content.</summary>
    public class RedactContentRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Configuration for the inspector.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inspectConfig")]
        public virtual InspectConfig InspectConfig { get; set; } 

        /// <summary>The list of items to inspect. Up to 100 are allowed per request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<ContentItem> Items { get; set; } 

        /// <summary>The strings to replace findings with. Must specify at least one.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("replaceConfigs")]
        public virtual System.Collections.Generic.IList<ReplaceConfig> ReplaceConfigs { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Results of deidentifying a list of items.</summary>
    public class RedactContentResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The redacted content.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<ContentItem> Items { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ReplaceConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Type of information to replace. Only one ReplaceConfig per info_type should be provided. If
        /// ReplaceConfig does not have an info_type, we'll match it against all info_types that are found but not
        /// specified in another ReplaceConfig.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("infoType")]
        public virtual InfoType InfoType { get; set; } 

        /// <summary>Content replacing sensitive information of given type. Max 256 chars.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("replaceWith")]
        public virtual string ReplaceWith { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The `Status` type defines a logical error model that is suitable for different programming
    /// environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). The error model
    /// is designed to be:
    ///
    /// - Simple to use and understand for most users - Flexible enough to meet unexpected needs
    ///
    /// # Overview
    ///
    /// The `Status` message contains three pieces of data: error code, error message, and error details. The error code
    /// should be an enum value of google.rpc.Code, but it may accept additional error codes if needed.  The error
    /// message should be a developer-facing English message that helps developers *understand* and *resolve* the error.
    /// If a localized user-facing error message is needed, put the localized message in the error details or localize
    /// it in the client. The optional error details may contain arbitrary information about the error. There is a
    /// predefined set of error detail types in the package `google.rpc` which can be used for common error conditions.
    ///
    /// # Language mapping
    ///
    /// The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire
    /// format. When the `Status` message is exposed in different client libraries and different wire protocols, it can
    /// be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped
    /// to some error codes in C.
    ///
    /// # Other uses
    ///
    /// The error model and the `Status` message can be used in a variety of environments, either with or without APIs,
    /// to provide a consistent developer experience across different environments.
    ///
    /// Example uses of this error model include:
    ///
    /// - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the
    /// normal response to indicate the partial errors.
    ///
    /// - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error
    /// reporting purpose.
    ///
    /// - Batch operations. If a client uses batch request and batch response, the `Status` message should be used
    /// directly inside batch response, one for each error sub-response.
    ///
    /// - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of
    /// those operations should be represented directly using the `Status` message.
    ///
    /// - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any
    /// stripping needed for security/privacy reasons.</summary>
    public class Status : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The status code, which should be an enum value of google.rpc.Code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual System.Nullable<int> Code { get; set; } 

        /// <summary>A list of messages that carry the error details.  There will be a common set of message types for
        /// APIs to use.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("details")]
        public virtual System.Collections.Generic.IList<System.Collections.Generic.IDictionary<string,object>> Details { get; set; } 

        /// <summary>A developer-facing error message, which should be in English. Any user-facing error message should
        /// be localized and sent in the google.rpc.Status.details field, or localized by the client.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Shared message indicating Cloud storage type.</summary>
    public class StorageConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Google Cloud Storage options specification.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cloudStorageOptions")]
        public virtual CloudStorageOptions CloudStorageOptions { get; set; } 

        /// <summary>Google Cloud Datastore options specification.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datastoreOptions")]
        public virtual DatastoreOptions DatastoreOptions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
